#include <iostream>
#include <string>
using namespace std;
#include <unistd.h>
#include<cstdlib>
#include <signal.h>
#include <sys/types.h>

// void myhander(int signo) //这里的参数的意思是收到了哪一个信号
// {
//   cout << "get a signal: " << signo << endl;
// }

// int main()
// {
//   for (int i = 0; i <= 31; i++)
//   {
//     signal(i, myhander);
//   }
//   //

//   while (true)
//   {
//     cout << "I am a crazy process" << getpid() << endl;
//     sleep(1);
//   }

//   return 0;
// }

// void Usage(string proc)
// {
//   cout << "Usage:\n\t" << proc << " signum pid\n\t" << endl;
// }

// int main(int argc, char *argv[])
// {
//   if (argc != 3)
//   {
//     Usage(argv[0]);
//     exit(1);
//   }

//   int signum = stoi(argv[1]);
//   pid_t pid = stoi(argv[2]);
//   int n = kill(pid, signum);
//   if (n == -1) 
//   {
//     perror("kill");
//     exit(2);
//   }
//   return 0;
// }

//
//void myhander(int signo)
//{
//  cout << "Process get signal: " << signo << endl;
//}
//
//void Usage(string proc)
//{
//  cout << "Usage:\n\t" << proc << " signum pid\n\t" << endl;
//}
//
//int main(int argc, char *argv[])
//{
//  signal(6, myhander);
//  int cnt = 5;
//  while (true)
//  {
//    cout << "I am a process, pid" << getpid() << endl;
//    sleep(1);
//    cnt--;
//    if (cnt == 0) abort();  //终止这个进程 
//  }
//
//  return 0;
//}

void myhander(int signum)
{
  cout << "get a signum : " << signum << endl;
}

int mian()
{
  signal(SIGFPE, myhander);
  cout << "pointer error before " << endl;
  sleep(1);

  int* p = nullptr;
  *p = 100;

  sleep(1);
  cout << "pointer error after " << endl;
  return 0;
}
